﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml;
using System.Xml.Linq;

namespace 实验十二第一题
{
    public partial class _Default : System.Web.UI.Page
    {
        public static int index; //设置一个静态变量，用于保存当前的记录的下标
        private const string fileName = "Cellphone.xml"; //设置要读取的XML文档的名称

        private void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DisplayRecord(0); //当第一次显示页面时，调用自定义的DisplayRecord()函数，用于显示XML文档中的第一条记录
            }
        }

        #region Web 窗体设计器生成的代码

        protected override void OnInit(EventArgs e)
        {
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.btnPreviousRecord.Click += new System.EventHandler(this.btnPreviousRecord_Click);
            this.btnNextRecord.Click += new System.EventHandler(this.btnNextRecord_Click);
            this.Load += new System.EventHandler(this.Page_Load);
        }

        #endregion

        private void btnPreviousRecord_Click(object sender, EventArgs e)
        {
            DisplayRecord(--index); //显示上一条记录，下标-1
        }

        private void btnNextRecord_Click(object sender, EventArgs e)
        {
            DisplayRecord(++index); //显示下一条记录，下标+1
        }


        private void DisplayRecord(int index)//自定义函数，用于显示指定下标的记录
        {
            string filePath = Server.MapPath(fileName);//得到要读取的文件的路径
            XmlDocument doc = new XmlDocument();//创建XmlDocument对象
            XmlNode node;//创建一个XmlNode对象，用于指向某个DOM中的Xml节点
            XmlNodeList nodeList;//创建一个XmlNodeList对象，用于保存一组XmlNode对象的集合
            int recordCount;//用户保存XML文档中记录数


            try
            {
                doc.Load(filePath);//将磁盘上的XML文档读入内存并构建为一个DOM

                nodeList = doc.SelectNodes("/手机信息/手机/品牌");//利用SelectNodes()方法，并根据参数中的XPath表达式，选择一组XmlNode对象，并作为一个XmlNodeList对象返回
                txtBrand.Text = nodeList[index].FirstChild.Value;//得到第一条记录中“品牌”元素的文本值（因文本值在DOM模型中作为一个单独的节点，并属于“品牌”节点的子节点）
                txtModel.Text = nodeList[index].Attributes["型号"].Value;//得到第一条记录中“型号”这个属性的属性值

                nodeList = doc.GetElementsByTagName("手机类型");//利用GetElementsByTagName()方法，得到指定名称的节点集
                dplType.SelectedValue = nodeList[index].FirstChild.Value;

                nodeList = doc.GetElementsByTagName("兼容网络制式");
                node = nodeList[index];
                nodeList = node.ChildNodes;//得到“兼容网络制式“中所有的子节点（即所有的”网络制式“节点）

                //**注意：除此之外，还应该掌握XmlNode对象的FirstChild、NextSibling 等属性的用法**

                for (int i = 0; i < cblNetwork.Items.Count; i++)
                {
                    cblNetwork.Items[i].Selected = false;
                }//将所有”网络制式“项目前的勾去掉

                for (int j = 0; j < nodeList.Count; j++)
                {
                    for (int i = 0; i < cblNetwork.Items.Count; i++)
                    {
                        if (nodeList[j].InnerText == cblNetwork.Items[i].Text)//将“兼容网络制式“中所有的子节点与复选框列表的所有项目比较，若文本相同，则打上勾
                        {
                            cblNetwork.Items[i].Selected = true;
                        }
                    }
                }

                nodeList = doc.GetElementsByTagName("长");
                txtLength.Text = nodeList[index].FirstChild.Value;

                nodeList = doc.GetElementsByTagName("宽");
                txtWidth.Text = nodeList[index].FirstChild.Value;

                nodeList = doc.GetElementsByTagName("厚");
                txtThickness.Text = nodeList[index].FirstChild.Value;

                nodeList = doc.GetElementsByTagName("重量");
                txtWeight.Text = nodeList[index].FirstChild.Value;

                nodeList = doc.GetElementsByTagName("售价");
                txtPrice.Text = nodeList[index].FirstChild.Value;


                recordCount = doc.SelectNodes(@"/手机信息/手机").Count;

                lblInfo.Text = "共有 " + recordCount + " 条记录，当前是第 " + (index + 1) + " 条记录";

                if (index == 0)
                {
                    btnPreviousRecord.Enabled = false;
                }
                else
                {
                    btnPreviousRecord.Enabled = true;
                }

                if (index == recordCount - 1)
                {
                    btnNextRecord.Enabled = false;
                }
                else
                {
                    btnNextRecord.Enabled = true;
                }//设置按钮的可用性
            }
            catch (Exception err)
            {
                lblInfo.Text = err.Message;
            }
        }
    }
}